package com.yonyou.cyxdms.basedata.service.service.option;


import com.yonyou.cyxdms.basedata.client.domains.vo.VsOptionVO;
import com.yonyou.cyxdms.basedata.service.entity.option.VsOptionPO;
import com.yonyou.cyxdms.basedata.service.vo.option.VehicleProductOptionVO;
import com.yonyou.cyxdms.basedata.service.vo.packages.PackageDictVO;
import com.yonyou.cyxdms.basedata.service.vo.packages.VehicleProductPackageVO;
import com.yonyou.cyxdms.basedata.service.dto.option.VsOptionDTO;
import com.yonyou.cyxdms.basedata.service.dto.vehiclemodel.OptionModifyDTO;
import com.yonyou.cyxdms.basedata.service.dto.vehiclemodel.OptionQueryDTO;
import com.yonyou.cyxdms.basedata.service.dto.vehiclemodel.PackageModifyDTO;
import com.yonyou.cyxdms.basedata.service.dto.vehiclemodel.PackageQueryDTO;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yonyou.cyx.framework.service.base.ICommonService;

import javax.servlet.http.HttpServletResponse;

/**
 * <p>
 * 选装服务类
 * </p>
 *
 * @author zys
 * @since 2020-02-10
 */
public interface VsOptionService extends ICommonService<VsOptionDTO, VsOptionPO, Long> {


    List<Map<String, Object>> getOptionByPackageId(Long packageId);

    List<VsOptionVO> queryOptionByCondition(Map<String, Object> queryParam);
    
    /**
     * 查询选装信息（pc）
     *
     * @param optionQueryDTO
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yonyou.cyxdms.basedata.service.vo.option.VehicleProductOptionVO>
     * @author zhangys
     * @since 2020/2/24
     */
    IPage<VehicleProductOptionVO> queryVehicleProductOption(Page page, OptionQueryDTO optionQueryDTO);

    /**
     * qcs根据查询条件返回对应的选装数据
     *
     * @param page
     * @param queryParam
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yonyou.cyxdms.basedata.service.vo.option.VehicleProductOptionVO>
     * @author zhangys
     * @since 2020/2/24
     */
    IPage<VehicleProductOptionVO> queryVehicleProductDcsOption(Page page, Map<String, Object> queryParam);

    /**
     * dcs新增选装
     *
     * @param optionModifyDTO
     * @return java.lang.Integer
     * @author zhangys
     * @since 2020/2/24
     */
    Integer addDcsOption(OptionModifyDTO optionModifyDTO);
    
    /**
     * dcs修改选装
     *
     * @param id
     * @param optionModifyDTO
     * @return java.lang.Integer
     * @author zhangys
     * @since 2020/2/24
     */
    Integer modifyDcsOption(Long id, OptionModifyDTO optionModifyDTO);
    
    /**
     * 新增选装
     *
     * @param optionModifyDTO
     * @return java.lang.Integer
     * @author zhangys
     * @since 2020/2/25
     */
    Integer addOption(OptionModifyDTO optionModifyDTO);
    
    /**
     * 修改选装
     *
     * @param id
     * @param optionModifyDTO
     * @return java.lang.Integer
     * @author zhangys
     * @since 2020/2/25
     */
    Integer modifyOption(Long id, OptionModifyDTO optionModifyDTO);


	List<VsOptionDTO> getAllOptionByAppId(String appId);

    /**
     * 根据查询条件返回选装
     *
     * @param optionQueryDTO
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.option.VehicleProductOptionVO>
     * @author caozx
     * @since 2020/12/8
     */
    List<VehicleProductOptionVO> queryVehicleProductOption(OptionQueryDTO optionQueryDTO);

    /**
     * 品系型查询界面配置选装下拉框
     *
     * @param brandsId, seriesId, modelsId, packageId
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.packages.VehicleProductPackageVO>
     * @author caozx
     * @since 2020/12/14
     */
    List<VehicleProductOptionVO> queryOptipnDictAll(String brandsId, String seriesId, String modelsId, String packageId);

    List<VehicleProductOptionVO> queryVehicleProductOptionNewQuery(OptionQueryDTO optionQueryDTO);

    void downloadUseModelExcel(HttpServletResponse response) throws IOException;

    Map<String, List> getOptionInfoByExcel(List<VehicleProductOptionVO> dealerList);

    List<VehicleProductOptionVO> queryVehicleProductOptionNoPage(OptionQueryDTO optionQueryDTO);

    List<VsOptionVO> queryAllOption();

    List<PackageDictVO> queryAllPackage();
}
